home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / jovept1.arc / CASE.C < prev    next >
Text File  |  1985-05-30  |  2KB  |  126 lines

  1. /* jove_case.c */
  2.  
  3. /* JOVE/MSDOS. K. Mitchum 1/85 */
  4. /* Modifications for personal use only. */
  5. /* original code J. Payne LSRHS 5/83 */
  6. /* Ken Mitchum */
  7. /* University of Pittsburgh */
  8. /* Decision Systems Laboratory */
  9.  
  10. /*
  11.    Jonathan Payne at Lincoln-Sudbury Regional High School 5-25-83
  12.  
  13.    jove_case.c
  14.  
  15.    contains case case-region and case-word functions.  */
  16.  
  17.  
  18.  
  19. #include "jove.h"
  20.  
  21.  
  22. DOTsave(buf)
  23. BUFLOC *buf;
  24. {
  25.     buf->p_line = curline;
  26.     buf->p_char = curchar;
  27. }
  28.  
  29. CapWord()
  30. {
  31.     int num = exp;
  32.  
  33.     exp = 1;    /* So all the commands are done once */
  34.  
  35.     while (num--) {
  36.         to_word(1);    /* Go to the beginning of the next word. */
  37.         if (eobp())
  38.             break;
  39.         upper(&linebuf[curchar]);    /* Cap this word. */
  40.         SetModified(curbuf);    /* Or else lsave won't do anything */
  41.         makedirty(curline);
  42.         curchar++;
  43.         while (!eolp() && isword(linebuf[curchar])) {
  44.             lower(&linebuf[curchar]);
  45.             curchar++;
  46.         }
  47.     }
  48. }
  49.  
  50. case_word(up)
  51. {
  52.     BUFLOC bp;
  53.  
  54.     DOTsave(&bp);
  55.     ForWord();    /* Go to end of the region */
  56.     case_reg(bp.p_line, bp.p_char, curline, curchar, up);
  57. }
  58.  
  59. upper(c)
  60. register char    *c;
  61. {
  62.     if (*c >= 'a' && *c <= 'z')
  63.         *c -= 040;
  64. }
  65.  
  66. lower(c)
  67. register char    *c;
  68. {
  69.     if (*c >= 'A' && *c <= 'Z')
  70.         *c += 040;
  71. }
  72.  
  73. case_reg(line1, char1, line2, char2, up)
  74. LINE    *line1,
  75.     *line2;
  76. {
  77.     char lbuf[LBSIZE];
  78.  
  79.     SetModified(curbuf);
  80.     fixorder(&line1, &char1, &line2, &char2);
  81.     lsave();
  82.     ignore(getline(line1->l_dline, lbuf));
  83.     for (;;) {
  84.         if (line1 == line2 && char1 == char2)
  85.             break;
  86.         if (lbuf[char1] == '\0') {
  87.             char1 = 0;
  88.             line1->l_dline = putline(lbuf);
  89.             makedirty(line1);
  90.             if (lastp(line1))
  91.                 break;
  92.             line1 = line1->l_next;
  93.             ignore(getline(line1->l_dline, lbuf));
  94.             continue;
  95.         }
  96.         if (up)
  97.             upper(&lbuf[char1]);
  98.         else
  99.             lower(&lbuf[char1]);
  100.         char1++;
  101.     }
  102.     line1->l_dline = putline(lbuf);
  103.     makedirty(line1);
  104.     getDOT();
  105. }
  106.  
  107. CasRegLower()
  108. {
  109.     CaseReg(0);
  110. }
  111.  
  112. CasRegUpper()
  113. {
  114.     CaseReg(1);
  115. }
  116.  
  117. CaseReg(up)
  118. {
  119.     register MARK    *mp = CurMark();
  120.  
  121.     case_reg(curline, curchar, mp->m_line, mp->m_char, up);
  122. }
  123.  
  124. /*-------------------------o.s. dependent----------------------------*/
  125. /* end */
  126.